#include <bits/stdc++.h>
using namespace std;

#define MAXN 5005

int fa[MAXN]; // 父节点表
int dp[MAXN]; // 集合的秩（树的深度）

// 带秩并查集初始化
inline void init(int n)
{
    for (int i = 1; i <= n; ++i)
    {
        // 初始时，每个节点的父节点都是自身
        fa[i] = i;

        // 每个节点的秩都是1
        dp[i] = 1;
    }
}

// 找到元素x所在的集合的根
int find(int x)
{
    // 如果要找的节点刚好就是集合的根
    // 那么直接返回其自身
    if(x == fa[x])
        return x;

    // 路径压缩
    // 顺着关系往根元素查找的同时
    // 将路径上所有元素的父节点全部压缩为根节点
    fa[x] = find(fa[x]);
    return fa[x];
}

// 元素合并
inline void merge(int i, int j)
{
    // 分别找到元素i和j的根元素x和y
    int x = find(i);
    int y = find(j);

    // 如果x所在的集合的秩（树的深度）比较小
    // 那么把x的父元素设置为y
    if (dp[x] <= dp[y])
        fa[x] = y;
    // 否则把y的父元素设置为x
    else
        fa[y] = x;

    // 如果x和y的秩一样，且i和j分属不同集合
    // 那么作为新的根元素的秩要+1
    if (dp[x] == dp[y] && x != y)
        dp[y]++;
}

int main()
{
    // n个人
    // m对亲戚关系
    // p次询问
    int n, m, p;
    cin >> n >> m >> p;

    init(n);

    int x, y;
    for (int i = 0; i < m; ++i)
    {
        // 将所有是亲戚关系的元素合并起来
        cin >> x >> y;
        merge(x, y);
    }

    int question[p][2];
    for (int i = 0; i < p; ++i)
        cin >> question[i][0] >> question[i][1];

    for (int i = 0; i < p; ++i)
    {
        if(find(question[i][0]) == find(question[i][1]))
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }

    return 0;
}